import axios from 'axios'
import { ElNotification } from 'element-plus'
import { TokenStorage } from '@/utils/localStorange.ts'
//创建axios实例
let request = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    timeout: 999999999,
})
//请求拦截器
request.interceptors.request.use((config) => {
    // 删除config中data中值为''、null、undefined的属性
    if (config.data && JSON.stringify(config.data) !== '{}') {
        Object.keys(config.data).forEach((key) => {
            if (!config.data[key] && config.data[key] !== 0)
                delete config.data[key]
        })
    }
    if (/get/i.test(config.method) || /delete/i.test(config.method)) {
        config.params = config.data
    }
    let token = TokenStorage.get() || ''
    if (token) {
        config.headers.Authorization = `Bearer ${token}`
    }
    return config
})
//响应拦截器
request.interceptors.response.use(
    (response) => {
        return response.data
    },
    (error) => {
        console.log(error)
        //处理网络错误
        let msg = ''
        let status = error?.response?.status
        switch (status) {
            case 401:
                msg = 'token过期'
                localStorage.removeItem('LOGIN_INFO')
                break
            case 403:
                msg = '无权访问'
                break
            case 404:
                msg = '请求地址错误'
                break
            case 500:
                msg = '服务器出现问题'
                break
            default:
                msg = '网络错误'
        }
        if (error?.response?.data?.msg) msg = error.response.data.msg
        ElNotification({
            type: 'error',
            title: '错误提示',
            message: msg,
        })
        return Promise.reject(error)
    },
)
export default request
